import { createWebHashHistory, createRouter } from 'vue-router'
/* Layout */
import Layout from '@/layout'

/**
 * Note: 路由配置项
 *
 * hidden: true                     // 当设置 true 的时候该路由不会再侧边栏出现 如401，login等页面，或者如一些编辑页面/edit/1
 * alwaysShow: true                 // 当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面
 *                                  // 只有一个时，会将那个子路由当做根路由显示在侧边栏--如引导页面
 *                                  // 若你想不管路由下面的 children 声明的个数都显示你的根路由
 *                                  // 你可以设置 alwaysShow: true，这样它就会忽略之前定义的规则，一直显示根路由
 * redirect: noRedirect             // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
 * name:'router-name'               // 设定路由的名字，一定要填写不然使用<keep-alive>时会出现各种问题
 * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数
 * roles: ['admin', 'common']       // 访问路由的角色权限
 * permissions: ['a:a:a', 'b:b:b']  // 访问路由的菜单权限
 * meta : {
    noCache: true                   // 如果设置为true，则不会被 <keep-alive> 缓存(默认 false)
    title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字
    icon: 'svg-name'                // 设置该路由的图标，对应路径src/assets/icons/svg
    breadcrumb: false               // 如果设置为false，则不会在breadcrumb面包屑中显示
    activeMenu: '/system/user'      // 当路由设置了该属性，则会高亮相对应的侧边栏。
  }
 */

// 公共路由
export const constantRoutes = [
  {
    path: "/redirect",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "/redirect/:path(.*)",
        component: () => import("@/views/redirect/index.vue"),
      },
    ],
  },
  {
    path: "/login",
    component: () => import("@/views/login"),
    hidden: true,
  },
  {
    path: "/register",
    component: () => import("@/views/register"),
    hidden: true,
  },
  {
    path: "/:pathMatch(.*)*",
    component: () => import("@/views/error/404"),
    hidden: true,
  },
  {
    path: "/401",
    component: () => import("@/views/error/401"),
    hidden: true,
  },
  {
    path: "/",
    component: Layout,
    redirect: "/dashboard",
    children: [
      {
        path: "dashboard",
        component: () => import("@/views/dashboard"),
        name: "Dashboard",
        meta: { title: "首页", icon: "dashboard", affix: true },
      },
    ],
  },
  // 监测分析
  {
    path: "/monitoringanalysis",
    component: Layout,
    redirect: "/monitoringanalysis/index",
    name: "Monitoringanalysis",
    meta: {
      title: "监测分析",
      icon: "sys-manage",
    },
    children: [
      // 本体安全监测
      {
        path: "OntologySafetyMonitoring",
        component: () =>
          import("@/views/monitoringanalysis/OntologySafetyMonitoring/index"),
        name: "OntologySafetyMonitoring",
        redirect: "/historiccharacter/index",
        meta: {
          title: "本体安全监测",
          icon: "",
        },
        children: [
          {
            path: "StructuralSafetyMonitoring",
            name: "StructuralSafetyMonitoring",
            component: () =>
              import(
                "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/index"
              ),
            meta: {
              title: "结构安全监测",
              icon: "",
            },
            children: [
              {
                path: "settlementmonitoring",
                name: "settlementmonitoring",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/settlementmonitoring/index"
                  ),
                meta: {
                  title: "基础沉降监测",
                  icon: "",
                },
              },
              {
                path: "Bridgedecksettlementmonitoring",
                name: "Bridgedecksettlementmonitoring",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/Bridgedecksettlementmonitoring/index"
                  ),
                meta: {
                  title: "桥面沉降监测",
                  icon: "",
                },
              },
              {
                path: "Andarchaxisdeformation",
                name: "Andarchaxisdeformation",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/Andarchaxisdeformation/index"
                  ),
                meta: {
                  title: "拱轴线变形监测",
                  icon: "",
                },
              },
              {
                path: "crackmonitoring",
                name: "crackmonitoring",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/crackmonitoring/index"
                  ),
                meta: {
                  title: "裂缝监测",
                  icon: "",
                },
              },
              {
                path: "Thestrainmonitoring",
                name: "Thestrainmonitoring",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/Thestrainmonitoring/index"
                  ),
                meta: {
                  title: "应变监测",
                  icon: "",
                },
              },
              {
                path: "Externalwallmonitoring",
                name: "Externalwallmonitoring",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/Externalwallmonitoring/index"
                  ),
                meta: {
                  title: "侧墙外鼓监测",
                  icon: "",
                },
              },
              {
                path: "BridgeVibrationMonitor",
                name: "BridgeVibrationMonitor",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/StructuralSafetyMonitoring/BridgeVibrationMonitor/index"
                  ),
                meta: {
                  title: "桥面振动监测",
                  icon: "",
                },
              },
            ],
          },
          {
            path: "materialStructure",
            name: "materialStructure",
            component: () =>
              import(
                "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/index"
              ),
            meta: {
              title: "材料安全监测",
              icon: "",
            },
            children: [
              {
                path: "compressiveStrength",
                name: "CompressiveStrength",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/compressiveStrength/index"
                  ),
                meta: {
                  title: "石材表面抗压强度监测",
                  icon: "",
                },
              },
              {
                path: "Watercontentofstone",
                name: "Watercontentofstone",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/Watercontentofstone/index"
                  ),
                meta: {
                  title: "石材表面吸水率监测",
                  icon: "",
                },
              },
              {
                path: "Stonesurfacehardness",
                name: "Stonesurfacehardness",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/Stonesurfacehardness/index"
                  ),
                meta: {
                  title: "石材表面硬度监测",
                  icon: "",
                },
              },
              {
                path: "RockWeatheringDegree",
                name: "RockWeatheringDegree",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/RockWeatheringDegree/index"
                  ),
                meta: {
                  title: "岩石表面风化程度",
                  icon: "",
                },
              },
              {
                path: "Stonesurfacecrackmonitoring",
                name: "Stonesurfacecrackmonitoring",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/Stonesurfacecrackmonitoring/index"
                  ),
                meta: {
                  title: "石材表面裂隙、空鼓发育情况监测",
                  icon: "",
                },
              },
              {
                path: "packingCompactnessMonitor",
                name: "packingCompactnessMonitor",
                component: () =>
                  import(
                    "@/views/monitoringanalysis/OntologySafetyMonitoring/materialStructure/packingCompactnessMonitor/index"
                  ),
                meta: {
                  title: "填料密实度情况监测",
                  icon: "",
                },
              },
            ],
          },
        ],
      },
      // 保存环境监测
      {
        path: "Environmentalprotectionmonitoring",
        component: () =>
          import(
            "@/views/monitoringanalysis/Environmentalprotectionmonitoring/index"
          ),
        name: "Environmentalprotectionmonitoring",
        redirect: "/historiccharacter/index",
        meta: {
          title: "保存环境监测",
          icon: "",
        },
        children: [
          {
            path: "historiccharacter",
            name: "historiccharacter",
            component: () =>
              import(
                "@/views/monitoringanalysis/Environmentalprotectionmonitoring/historiccharacter/index"
              ),
            meta: {
              title: "历史风貌监测",
              icon: "",
            },
          },
          {
            path: "surroundingcities",
            name: "surroundingcities",
            component: () =>
              import(
                "@/views/monitoringanalysis/Environmentalprotectionmonitoring/surroundingcities/index"
              ),
            meta: {
              title: "周边城市建设监测",
              icon: "",
            },
          },
          {
            path: "waterlevelmonitoring",
            name: "waterlevelmonitoring",
            component: () =>
              import(
                "@/views/monitoringanalysis/Environmentalprotectionmonitoring/waterlevelmonitoring/index"
              ),
            meta: {
              title: "水位及水流速监测",
              icon: "",
            },
          },
          {
            path: "Meteorologicalenvironmentmonitoring",
            name: "Meteorologicalenvironmentmonitoring",
            component: () =>
              import(
                "@/views/monitoringanalysis/Environmentalprotectionmonitoring/Meteorologicalenvironmentmonitoring/index"
              ),
            meta: {
              title: "气象环境监测",
              icon: "",
            },
          },
          {
            path: "watermonitoring",
            name: "watermonitoring",
            component: () =>
              import(
                "@/views/monitoringanalysis/Environmentalprotectionmonitoring/watermonitoring/index"
              ),
            meta: {
              title: "水质监测",
              icon: "",
            },
          },
          {
            path: "Environmentalpollutionparameters",
            name: "Environmentalpollutionparameters",
            component: () =>
              import(
                "@/views/monitoringanalysis/Environmentalprotectionmonitoring/Environmentalpollutionparameters/index"
              ),
            meta: {
              title: "污染环境参数",
              icon: "",
            },
          },
        ],
      },
    ],
  },
  // 预警管理
  {
    path: "/Warningalarms",
    component: Layout,
    redirect: "/Warningalarms/Alarmwarningrules/index",
    name: "Warningalarms",
    meta: {
      title: "预警管理",
      icon: "user-manage",
    },
    children: [
      {
        path: "Alarmwarningrules",
        name: "Alarmwarningrules",
        component: () =>
          import("@/views/Warningalarms/Alarmwarningrules/index"),
        meta: {
          title: "告警预警规则",
          icon: "",
        },
      },
      {
        path: "record",
        name: "record",
        component: () => import("@/views/Warningalarms/record/index"),
        meta: {
          title: "预警记录",
          icon: "",
        },
        children: [
          {
            path: "monitor",
            name: "monitor",
            component: () =>
              import("@/views/Warningalarms/record/monitor/index"),
            meta: {
              title: "预警监测",
              icon: "",
            },
          },
        ],
      },
    ],
  },
  // 巡检管理
  {
    path: "/onSiteInspection",
    component: Layout,
    redirect: "/onSiteInspection/index",
    name: "onSiteInspection",
    meta: {
      title: "巡检管理",
      icon: "user-manage",
    },
    children: [
      {
        path: "onSiteInspectionRecord",
        name: "onSiteInspectionRecord",
        component: () =>
          import("@/views/onSiteInspection/onSiteInspectionRecord/index"),
        redirect: "/onSiteInspectionRecord/index",
        meta: {
          title: "专业巡检",
          icon: "",
        },
        children: [
          {
            path: "records",
            name: "records",
            component: () =>
              import(
                "@/views/onSiteInspection/onSiteInspectionRecord/records/index"
              ),
            meta: {
              title: "记录管理",
              icon: "",
            },
          },
          {
            path: "problem",
            name: "recordProblem",
            component: () =>
              import(
                "@/views/onSiteInspection/onSiteInspectionRecord/problem/index"
              ),
            meta: {
              title: "问题上报",
              icon: "",
            },
          },
        ],
      },
      {
        path: "onSiteInspectionDay",
        name: "onSiteInspectionDay",
        component: () =>
          import("@/views/onSiteInspection/onSiteInspectionDay/index"),
        meta: {
          title: "日常巡检",
          icon: "",
        },
      },
      {
        path: "problem",
        name: "pinspectionProblemroblem",
        component: () => import("@/views/onSiteInspection/problem/index"),
        meta: {
          title: "问题类型管理",
          icon: "",
        },
      },
      {
        path: "warningtype",
        name: "warningtype",
        component: () => import("@/views/onSiteInspection/warningtype/index"),
        meta: {
          title: "预警类型管理",
          icon: "",
        },
      },
      {
        path: "statistics",
        name: "statistics",
        component: () => import("@/views/onSiteInspection/statistics/index"),
        meta: {
          title: "统计分析",
          icon: "",
        },
      },
    ],
  },
  // 基础信息管理
  {
    path: "/BasicInformationManagement",
    component: Layout,
    redirect: "/BasicInformationManagement/BridgeManagement/index",
    name: "BasicInformationManagement",
    meta: {
      title: "基础信息管理",
      icon: "user-manage",
    },
    children: [
      {
        path: "bridgeManagement",
        name: "bridgeManagement",
        component: () =>
          import("@/views/BasicInformationManagement/BridgeManagement/index"),
        meta: {
          title: "桥梁管理",
          icon: "",
        },
      },
      {
        path: "Collector",
        name: "Collector",
        component: () =>
          import("@/views/BasicInformationManagement/Collector/index"),
        meta: {
          title: "采集器管理",
          icon: "",
        },
      },
      {
        path: "Monitoringpointmanagement",
        name: "Monitoringpointmanagement",
        component: () =>
          import(
            "@/views/BasicInformationManagement/Monitoringpointmanagement/index"
          ),
        meta: {
          title: "监测点位管理",
          icon: "",
        },
      },
      {
        path: "Sensormanagement",
        name: "Sensormanagement",
        component: () =>
          import("@/views/BasicInformationManagement/Sensormanagement/index"),
        meta: {
          title: "传感器管理",
          icon: "",
        },
      },
    ],
  },
  //系统管理
  {
    path: "/systemManage",
    component: Layout,
    redirect: "/systemManage/index",
    name: "System",
    meta: {
      title: "系统管理",
      icon: "sys-manage",
    },
    children: [
      {
        path: "authManage",
        component: () => import("@/views/systemManage/authManage/index"), // Parent router-view
        name: "AuthManage",
        redirect: "/authManage/index",
        meta: {
          title: "权限管理",
          icon: "",
        },
        children: [
          {
            path: "managerList",
            name: "ManagerList",
            component: () =>
              import("@/views/systemManage/authManage/managerList/index"),
            meta: {
              title: "管理员列表",
              icon: "",
            },
          },
          {
            path: "roleManage",
            name: "RoleManage",
            component: () =>
              import("@/views/systemManage/authManage/roleManage/index"),
            meta: {
              title: "角色管理",
              icon: "",
            },
          },
          {
            path: "menuManage",
            name: "MenuManage",
            component: () =>
              import("@/views/systemManage/authManage/menuManage/index"),
            meta: {
              title: "菜单管理",
              icon: "",
            },
          },
          {
            path: "responsibleOrganization",
            name: "responsibleOrganization",
            component: () =>
              import(
                "@/views/systemManage/authManage/responsibleOrganization/index"
              ),
            meta: {
              title: "责任维保单位",
              icon: "",
            },
          },
        ],
      },
    ],
  },
  {
    path: "/user",
    component: Layout,
    hidden: true,
    redirect: "noredirect",
    children: [
      {
        path: "profile",
        component: () => import("@/views/system/user/profile/index"),
        name: "Profile",
        meta: { title: "个人中心", icon: "user" },
      },
    ],
  },
];

// 动态路由，基于用户权限动态去加载
export const dynamicRoutes = [
  {
    path: '/system/user-auth',
    component: Layout,
    hidden: true,
    permissions: ['system:user:edit'],
    children: [
      {
        path: 'role/:userId(\\d+)',
        component: () => import('@/views/system/user/authRole'),
        name: 'AuthRole',
        meta: { title: '分配角色', activeMenu: '/system/user' }
      }
    ]
  },
  {
    path: '/system/role-auth',
    component: Layout,
    hidden: true,
    permissions: ['system:role:edit'],
    children: [
      {
        path: 'user/:roleId(\\d+)',
        component: () => import('@/views/system/role/authUser'),
        name: 'AuthUser',
        meta: { title: '分配用户', activeMenu: '/system/role' }
      }
    ]
  },
  {
    path: '/system/dict-data',
    component: Layout,
    hidden: true,
    permissions: ['system:dict:list'],
    children: [
      {
        path: 'index/:dictId(\\d+)',
        component: () => import('@/views/system/dict/data'),
        name: 'Data',
        meta: { title: '字典数据', activeMenu: '/system/dict' }
      }
    ]
  },
  {
    path: '/monitor/job-log',
    component: Layout,
    hidden: true,
    permissions: ['monitor:job:list'],
    children: [
      {
        path: 'index/:jobId(\\d+)',
        component: () => import('@/views/monitor/job/log'),
        name: 'JobLog',
        meta: { title: '调度日志', activeMenu: '/monitor/job' }
      }
    ]
  },
  {
    path: '/tool/gen-edit',
    component: Layout,
    hidden: true,
    permissions: ['tool:gen:edit'],
    children: [
      {
        path: 'index/:tableId(\\d+)',
        component: () => import('@/views/tool/gen/editTable'),
        name: 'GenEdit',
        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
      }
    ]
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes: constantRoutes,
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      return { top: 0 }
    }
  },
});

export default router;